using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
namespace Test {
	class ImgFilter {
		static void Main() {
			Bitmap bmp=Bitmap.FromFile(@"C:\img\plate1.jpg") as Bitmap;
			Bitmap bmpCd=ColDetect(bmp,Color.FromArgb(177,157,44),40);
			Dictionary<Color,int> sta=Stat(bmpCd);
			bmpCd.Save(@"C:\img\ColDetect.jpg");
		}
		static Bitmap ColDetect(Bitmap bmp,Color tcol,int thres) {
			Bitmap bout=new Bitmap(bmp.Width,bmp.Height);
			Graphics gr=Graphics.FromImage(bout);
			gr.Clear(Color.White);
			for(int x=0;x<bmp.Width;x++)
				for(int y=0;y<bmp.Height;y++)
				{
					Color col=bmp.GetPixel(x,y);
					if(Math.Abs(tcol.R-col.R)<thres&&Math.Abs(tcol.G-col.G)<thres&&Math.Abs(tcol.B-col.B)<thres)
						//int avg=(Math.Abs(tcol.R-col.R)+Math.Abs(tcol.G-col.G)+Math.Abs(tcol.B-col.B))/3;
						//if(avg<thres)
						bout.SetPixel(x,y,col);
				}
			return bout;
		}
		static Bitmap ColDiff(Bitmap bmp,Color tcol) {
			for(int x=0;x<bmp.Width;x++)
				for(int y=0;y<bmp.Height;y++)
				{
					Color col=bmp.GetPixel(x,y);
					int avg=(Math.Abs(tcol.R-col.R)+Math.Abs(tcol.G-col.G)+Math.Abs(tcol.B-col.B))/3;
					bmp.SetPixel(x,y,Color.FromArgb(avg,avg,avg));
					//bmp.SetPixel(x,y,Color.FromArgb(Math.Abs(tcol.R-col.R),Math.Abs(tcol.G-col.G),Math.Abs(tcol.B-col.B)));
				}
			return bmp;
		}
		static Dictionary<Color,int> Stat(Bitmap bmp) {
			Dictionary<Color,int> dict=new Dictionary<Color,int>();
			for(int x=0;x<bmp.Width;x++)
				for(int y=0;y<bmp.Height;y++)
				{
					Color col=bmp.GetPixel(x,y);
					if(dict.ContainsKey(col))
						dict[col]++;
					else
						dict.Add(col,1);
				}
			return dict;
		}
		static Bitmap Colorize(Bitmap bmp,int r,int g,int b) {
			int max=r;
			if(g>max)
				max=g;
			if(b>max)
				max=b;
			float[] bal={ (float)r/max,(float)g/max,(float)b/max };
			for(int x=0;x<bmp.Width;x++)
				for(int y=0;y<bmp.Height;y++)
				{
					Color col=bmp.GetPixel(x,y);
					Color grs=Color.FromArgb(col.A,(int)(col.R*bal[0]),(int)(col.G*bal[1]),(int)(col.B*bal[2]));
					bmp.SetPixel(x,y,grs);
				}
			return bmp;
		}
		static Bitmap GrayScale(Bitmap bmp,int r,int g,int b) {
			int sum=r+g+b;
			float[] bal={ (float)r/sum,(float)g/sum,(float)b/sum };
			for(int x=0;x<bmp.Width;x++)
				for(int y=0;y<bmp.Height;y++)
				{
					Color col=bmp.GetPixel(x,y);
					int nc=(int)(bal[0]*col.R+bal[1]*col.G+bal[2]*col.B);
					Color grs=Color.FromArgb(col.A,nc,nc,nc);
					bmp.SetPixel(x,y,grs);
				}
			return bmp;
		}
	}
}
